\subsubsection{Timer}

Esta FSM representa el manejo de turnos tipo Round-Robin.

Cada sucursal posee un reloj de tiempo real (rtc) que se mantiene sincronizado con el de las demás sucursales mediante un servidor de hora en internet.
En primera instancia, se configuran en cada sucursal , los siguientes datos:

\begin{itemize}
\item Cantidad de sucursales
\item Id de sucursal
\item Duración del quantum
\item Fecha y hora de sincronización inicial
\end{itemize} 

Una vez configurada, la FSM espera que llegue el momento de la sincronización.
En ese momento se pasa al primer turno y se inicializa un timer t. La máquina cuyo \emph{Id i} sea 1 pasará al estado \emph{Turno Mio} y las demás pasarán al estado \emph{Turno Otro}.

En el estado \emph{Turno Otro} están todas menos una máquina.
Cada vez que $t = q$ la máquina cuyo \emph{Id i} es igual al valor del próximo turno (\emph{nextVal(turn)}) pasa al estado \emph{Turno Mio}, mientras que las otras permanecen en ese estado.

En el estado \emph{Turno Mio} solo se encuentra la máquina a la que le corresponde el turno actual.
Desde este estado, puede enviar pedidos y modificaciones al menú. Al cumplirse su quantum, pasa al estado \emph{Turno Otro}.

\medskip

Variables utilizadas:

\begin{itemize}
\item DateTime rtc = Reloj de tiempo real
\item DateTime psync = Fecha de sincronización
\item integer q = Duración del quantum
\item integer id i = Numero de sucursal
\item timer t = Timer para el cambio de turno
\item integer turn = Contiene el numero de la sucursal a la que le corresponde el turno actual
\end{itemize} 

\medskip
Se utiliza también la función \emph{nextVal} que devuelve:

\begin{itemize}
\item $turn + 1$ si $turn < Cantidad Sucursales$
\item $1$ si $turn = Cantidad Sucursales$
\end{itemize} 

\bigskip

\begin{figure}[!ht]
  \begin{center}
	\includegraphics[scale=0.30]{imagenes/diagramas/fsm_timer.png}
  \end{center}
  \caption{Timer}
\end{figure}

\clearpage